"""
A股投资团队 Web界面主程序
"""
import streamlit as st
import datetime

# 导入模块
# 注意：确保 web/modules 在 Python 路径中，或者使用相对导入
try:
    from modules.app_setup import setup_page, initialize_session_state, logger
    from modules.data_collector import load_initial_data, create_db_tables # 导入 create_db_tables
    from modules.market_overview import render_market_overview
    from modules.agent_team import render_agent_team
    from modules.investment_decisions import render_investment_decisions
    from modules.portfolio import render_portfolio
    from modules.performance import render_performance
    from modules.settings import render_settings
except ImportError as e:
    st.error(f"导入模块失败: {e}. 请确保模块文件在 web/modules/ 目录下并且路径设置正确。")
    # 提供一些调试信息
    import sys
    st.error(f"Python 路径: {sys.path}")
    st.stop() # 停止执行

# --- 1. 页面和会话状态设置 ---
setup_page()
initialize_session_state()

# --- 1.5. 确保数据库表存在 ---
create_db_tables() # 在加载数据前调用

# --- 2. 加载初始数据 ---
# 这将在应用首次加载或 data_loaded 为 False 时运行
load_initial_data()

# --- 3. 侧边栏 ---
with st.sidebar:
    st.markdown("## A股投资智能体团队")
    st.markdown("多智能体协同投资决策系统")
    st.markdown("---")

    # 标签页导航
    tab_options = ["市场概览", "智能体团队", "投资决策", "投资组合", "绩效分析", "系统设置"]
    # 使用 session_state 中的值作为默认选中的标签
    selected_tab_index = tab_options.index(st.session_state.selected_tab) if st.session_state.selected_tab in tab_options else 0
    selected_tab = st.radio("功能导航", tab_options, index=selected_tab_index)
    # 如果用户切换了标签，更新 session_state
    if selected_tab != st.session_state.selected_tab:
        st.session_state.selected_tab = selected_tab
        st.rerun() # 重新运行以显示新标签页内容

    st.markdown("---")

    # 日期选择 (可以考虑移到特定页面如果只在某些页面需要)
    analysis_date = st.date_input("分析日期", value=datetime.datetime.now().date())

    # 运行模式 (同上，可以考虑移到特定页面)
    run_mode = st.selectbox("运行模式", ["回测模式", "模拟交易", "实盘交易"])

    # 运行按钮 (触发投资决策流程)
    if st.button("运行投资决策流程", type="primary"):
        with st.spinner("正在运行投资决策流程..."):
            try:
                # 确保数据已加载 (虽然 load_initial_data 应该已经处理了)
                if not st.session_state.get('data_loaded', False):
                    st.warning("数据尚未加载，请稍候重试。")
                else:
                    # 动态导入投资团队创建函数
                    try:
                        from workflows.investment_team import create_investment_team
                        investment_team = create_investment_team()
                        logger.info("运行投资团队决策流程...")
                        # 假设 investment_team.run() 返回所需的结果字典
                        result = investment_team.run()
                        st.session_state.workflow_result = {
                            "status": "success",
                            "timestamp": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                            "message": "投资团队决策流程已完成",
                            "result": result # 存储完整结果
                        }
                        st.sidebar.success("投资决策流程已完成！")
                        logger.info("投资决策流程成功完成。")
                        # 可以在这里触发页面刷新或更新相关组件
                        # st.rerun() # 如果需要立即看到结果反映在页面上

                    except ImportError:
                        logger.warning("无法导入 investment_team 模块，将使用模拟数据。")
                        # 使用模拟结果
                        st.session_state.workflow_result = {
                            "status": "success_mock",
                            "timestamp": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                            "message": "使用模拟数据（投资团队模块不可用）",
                            "result": {
                                "market_analysis": "模拟市场观点：市场震荡，关注科技。",
                                "stock_picks": ["600036", "000858"], # 模拟推荐
                                "portfolio_allocation": {"股票": 0.75, "债券": 0.15, "现金": 0.10}, # 模拟配置
                                "market_sentiment": {"fear_greed_index": 55, "fear_greed_change": "-3"} # 模拟情绪
                            }
                        }
                        st.sidebar.success("投资决策流程已完成（模拟）！")
                    except Exception as e:
                         logger.error(f"运行投资团队决策流程时出错: {e}", exc_info=True)
                         st.sidebar.error(f"运行失败: {e}")
                         st.session_state.workflow_result = {
                             "status": "error",
                             "timestamp": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                             "message": f"运行失败: {e}",
                             "result": {}
                         }

            except Exception as e:
                logger.error(f"运行投资决策流程按钮回调时出错: {e}", exc_info=True)
                st.sidebar.error(f"处理运行时出错: {e}")

    # 版本信息
    st.markdown("---")
    st.markdown("**版本**: v0.2.0 (Modular)")
    st.markdown("**更新时间**: 2025-04-15")


# --- 4. 主界面渲染 ---
# 根据选择的标签页调用对应的渲染函数
if st.session_state.selected_tab == "市场概览":
    render_market_overview()
elif st.session_state.selected_tab == "智能体团队":
    render_agent_team()
elif st.session_state.selected_tab == "投资决策":
    render_investment_decisions()
elif st.session_state.selected_tab == "投资组合":
    render_portfolio()
elif st.session_state.selected_tab == "绩效分析":
    render_performance()
elif st.session_state.selected_tab == "系统设置":
    render_settings()
else:
    # 如果出现未知标签页，默认显示市场概览
    st.warning(f"未知的标签页: {st.session_state.selected_tab}，显示市场概览。")
    render_market_overview()

# --- 5. (可选) 显示调试信息 ---
# with st.expander("调试信息"):
#     st.write("Session State:", st.session_state)